home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / javadoc / MIFDocumentationGenerator.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  18.8 KB  |  759 lines

  1. package sun.tools.javadoc;
  2.  
  3. import java.io.File;
  4. import java.io.PrintStream;
  5. import java.util.Enumeration;
  6. import java.util.Hashtable;
  7. import java.util.Vector;
  8. import sun.tools.java.ClassDeclaration;
  9. import sun.tools.java.ClassDefinition;
  10. import sun.tools.java.ClassNotFound;
  11. import sun.tools.java.Constants;
  12. import sun.tools.java.FieldDefinition;
  13. import sun.tools.java.Identifier;
  14. import sun.tools.java.Type;
  15. import sun.tools.tree.LocalField;
  16.  
  17. class MIFDocumentationGenerator extends DocumentationGenerator implements Constants {
  18.    static final int RECTID = 17;
  19.    ClassDeclaration currentClass;
  20.    Vector allFields = new Vector();
  21.    static final int C_VARIABLE = 0;
  22.    static final int C_CONSTRUCTOR = 1;
  23.    static final int C_METHOD = 2;
  24.    static final int MARKER_package = 18;
  25.    static final int MARKER_classType = 19;
  26.    static final int MARKER_class = 20;
  27.    static final int MARKER_methodName = 22;
  28.    static final char hardSpaceChar = '\u0011';
  29.    private static final double firstMargin = (double)0.5F;
  30.    private static final double tabIncrement = (double)0.25F;
  31.    static String[] DocumentationStrings = new String[]{"Variables", "Constructors", "Methods"};
  32.  
  33.    void genPackagesDocumentation(String[] var1, String[] var2) {
  34.    }
  35.  
  36.    void genPackageDocumentation(Identifier var1, ClassDeclaration[] var2, ClassDeclaration[] var3, ClassDeclaration[] var4, ClassDeclaration[] var5) {
  37.       PrintStream var6 = DocumentationGenerator.openFile(var1 + ".mif");
  38.       MIFPrintStream var7 = new MIFPrintStream(var6, "AW.mif", 17);
  39.       var7.newParagraph("Chapter Number").markReference("Package " + var1).mark(18, var1.toString()).charTag("Chapter Word", "chapter");
  40.       var7.newParagraph("Chapter Title").literal("Package " + var1);
  41.       File var8 = new File("capsule", var1 + ".fm");
  42.       if (var8.exists()) {
  43.          var7.importText("<c\\>capsule<c\\>" + var1 + ".fm");
  44.       } else {
  45.          System.out.println("Can't find capsule " + var8);
  46.          var7.newParagraph("First").charTag("OI-Opening Initial", "S").literal("ome stuff that Lisa or someone else has written about ").literal("the package " + var1);
  47.       }
  48.  
  49.       this.genPackageDocumentationType(var7, var3, "Classes");
  50.       this.genPackageDocumentationType(var7, var4, "Exceptions");
  51.       this.genPackageDocumentationType(var7, var5, "Errors");
  52.       this.genPackageDocumentationType(var7, var2, "Interfaces");
  53.       var7.close();
  54.    }
  55.  
  56.    private void genPackageDocumentationType(MIFPrintStream var1, ClassDeclaration[] var2, String var3) {
  57.       if (var2.length != 0) {
  58.          DocumentationGenerator.sort(var2);
  59.          var1.newParagraph("ClassType").mark(19, var3).literal(var3);
  60.  
  61.          for(int var4 = 0; var4 < var2.length; ++var4) {
  62.             try {
  63.                ClassDefinition var5 = var2[var4].getClassDefinition(super.env);
  64.                this.genClassDocumentation(var1, var5);
  65.             } catch (ClassNotFound var6) {
  66.                System.err.println("Warning: Couldn't find class info for " + var2[var4].getName());
  67.             }
  68.          }
  69.  
  70.       }
  71.    }
  72.  
  73.    public void genClassDocumentation(ClassDefinition var1, ClassDeclaration var2, ClassDeclaration var3) {
  74.       PrintStream var4 = DocumentationGenerator.openFile(var1.getName() + ".mif");
  75.       MIFPrintStream var5 = new MIFPrintStream(var4, "AW.mif", 17);
  76.       this.genClassDocumentation(var5, var1);
  77.       var5.close();
  78.    }
  79.  
  80.    private void genClassDocumentation(MIFPrintStream var1, ClassDefinition var2) {
  81.       System.out.println("generating documentation for " + var2);
  82.       this.currentClass = var2.getClassDeclaration();
  83.       Identifier var3 = var2.getName();
  84.       Identifier var4 = var2.getName().getName();
  85.       Identifier var5 = var2.getName().getQualifier();
  86.       String var6 = var2.isInterface() ? "Interface" : "Class";
  87.       String var7 = var6 + " " + var4;
  88.       var1.newParagraph("Class Header").emitPendingMarks().markReference(this.classTag(this.currentClass)).mark(20, var7).mark(0, var5).mark(1, var7).index((var2.isInterface() ? "Interfaces" : "Classes") + ":" + "<ClassName>" + var3 + "<Default Para Font>").index(var4 + ":" + var6 + " in package " + var5).literal(var7).topLevel();
  89.       if (!var2.isPublic() && !Constants.idNull.equals(var2.getName().getQualifier())) {
  90.          var1.newParagraph("body");
  91.          var1.literal("This class is not public and can therefore ").literal("cannot be used outside this package.");
  92.       } else {
  93.          Vector var8 = DocumentationGenerator.allVariables(var2);
  94.          Vector var9 = DocumentationGenerator.allConstructors(var2);
  95.          Vector var10 = DocumentationGenerator.allMethods(var2);
  96.          var8 = DocumentationGenerator.localFieldsOf(var2, var8);
  97.          var10 = DocumentationGenerator.localFieldsOf(var2, var10);
  98.          var9 = DocumentationGenerator.localFieldsOf(var2, var9);
  99.          var1.html("ClassComment", ((DocumentationGenerator)this).firstSentence(var2));
  100.          FieldDefinition[] var11 = new FieldDefinition[var8.size()];
  101.          FieldDefinition[] var12 = new FieldDefinition[var10.size()];
  102.          FieldDefinition[] var13 = new FieldDefinition[var9.size()];
  103.          var8.copyInto(var11);
  104.          var10.copyInto(var12);
  105.          var9.copyInto(var13);
  106.          DocumentationGenerator.xsort(var11);
  107.          DocumentationGenerator.xsort(var12);
  108.          DocumentationGenerator.xsort(var13);
  109.          this.genClassIndex(var2, var1, var11, var13, var12);
  110.          String var14 = var2.getDocumentation();
  111.          if (var14 != null) {
  112.             Vector var15 = DocumentationGenerator.mergeDoc(var14);
  113.             String var16 = ((DocumentationGenerator)this).getComment(var15);
  114.             String var17 = ((DocumentationGenerator)this).getAuthors(var15);
  115.             String var18 = ((DocumentationGenerator)this).getVersion(var15);
  116.             Vector var19 = ((DocumentationGenerator)this).getSees(var15, this.currentClass);
  117.             if (var16 != null) {
  118.                var1.html("ClassComment", var16);
  119.             }
  120.  
  121.             if (var18 != null) {
  122.                var1.newParagraph("ClassInfo").literal("Version:");
  123.                var1.newParagraph("ClassInfoData").literal(var18);
  124.             }
  125.  
  126.             if (var17 != null) {
  127.                var1.newParagraph("ClassInfo").literal("Author:");
  128.                var1.newParagraph("ClassInfoData").literal(var17);
  129.             }
  130.  
  131.             if (var19 != null) {
  132.                var1.newParagraph("ClassInfo").literal("See Also:");
  133.                var1.newParagraph("ClassInfoData");
  134.                this.handleSeeStrings(var1, var19);
  135.             }
  136.          }
  137.  
  138.          this.genDocumentation(var1, var11, 0);
  139.          this.genDocumentation(var1, var13, 1);
  140.          this.genDocumentation(var1, var12, 2);
  141.       }
  142.    }
  143.  
  144.    private void genSuperClasses(MIFPrintStream var1, ClassDefinition var2) {
  145.       ClassDeclaration var3 = var2.getClassDeclaration();
  146.       Vector var4 = ((DocumentationGenerator)this).superclassesOf(var3);
  147.       int var5 = var4.size();
  148.       ClassDeclaration[] var6 = var2.getInterfaces();
  149.       if (var5 != 1) {
  150.          var1.newParagraph("Parents").indent((double)0.5F, (double)0.5F, (double)0.0F).println("   <PgfSpAfter  12pt>").println("   <PgfNumTabs " + (var5 - 1) + ">");
  151.  
  152.          for(int var7 = 0; var7 < var5 - 1; ++var7) {
  153.             double var8 = (double)0.5F + (double)0.25F * (double)(var7 + 1);
  154.             var1.println("      <TabStop <TSX " + var8 + "in> " + "<TSType Left> <TSLeaderStr ` ' > >");
  155.          }
  156.  
  157.          if (var2.isPublic()) {
  158.             var1.literal("public ");
  159.          }
  160.  
  161.          if (var2.isFinal()) {
  162.             var1.literal("final ");
  163.          }
  164.  
  165.          var1.literal(var2.isInterface() ? "interface " : "class ");
  166.          Identifier var14 = var2.getName().getQualifier();
  167.          Identifier var9 = var2.getName().getName();
  168.          if (var14 != null) {
  169.             var1.literal(var14).literal('.');
  170.          }
  171.  
  172.          var1.bold(var9);
  173.          if (!var2.isInterface()) {
  174.             int var10 = var5 - 1;
  175.             int var11 = 1;
  176.  
  177.             while(true) {
  178.                --var10;
  179.                if (var10 < 0) {
  180.                   break;
  181.                }
  182.  
  183.                ClassDeclaration var12 = (ClassDeclaration)var4.elementAt(var10);
  184.                var1.literal('\n');
  185.  
  186.                for(int var13 = 0; var13 < var11; ++var13) {
  187.                   var1.literal('\t');
  188.                }
  189.  
  190.                var1.literal("extends").literal('\u0011');
  191.                var14 = var12.getName().getQualifier();
  192.                var9 = var12.getName().getName();
  193.                if (var14 != null) {
  194.                   var1.literal(var14).literal('.');
  195.                }
  196.  
  197.                var1.bold(var9);
  198.                this.XRef(var1, var12);
  199.                ++var11;
  200.             }
  201.          }
  202.  
  203.          if (var6.length > 0) {
  204.             var1.literal(var2.isInterface() ? "\n\textends " : "\n\timplements ");
  205.  
  206.             for(int var19 = 0; var19 < var6.length; ++var19) {
  207.                if (var19 > 0) {
  208.                   var1.literal(", ");
  209.                }
  210.  
  211.                var14 = var6[var19].getName().getQualifier();
  212.                var9 = var6[var19].getName().getName();
  213.                if (var14 != null) {
  214.                   var1.literal(var14).literal('.');
  215.                }
  216.  
  217.                var1.bold(var9);
  218.                this.XRef(var1, var6[var19]);
  219.             }
  220.          }
  221.  
  222.       }
  223.    }
  224.  
  225.    private void genClassIndex(ClassDefinition var1, MIFPrintStream var2, FieldDefinition[] var3, FieldDefinition[] var4, FieldDefinition[] var5) {
  226.       var1.getClassDeclaration();
  227.       ClassDeclaration var6 = var1.getSuperClass();
  228.       ClassDeclaration[] var7 = var1.getInterfaces();
  229.       var2.newParagraph("SummaryTtyFirst");
  230.       if (var1.isPublic()) {
  231.          var2.literal("public").literal('\u0011');
  232.       }
  233.  
  234.       if (var1.isFinal()) {
  235.          var2.literal("final").literal('\u0011');
  236.       }
  237.  
  238.       var2.literal(var1.isInterface() ? "interface" : "class").literal('\u0011');
  239.       Identifier var8 = var1.getName().getQualifier();
  240.       if (var8 != null && var8 != Constants.idNull) {
  241.          var2.literal(var8).literal('.');
  242.       }
  243.  
  244.       var2.bold(var1.getName().getName());
  245.       if (!var1.isInterface() && var6 != null) {
  246.          var8 = var6.getName().getQualifier();
  247.          var2.newParagraph("SummaryTty").println("   <PgfWithPrev Yes>").literal("    extends").literal('\u0011');
  248.          if (var8 != null && var8 != Constants.idNull) {
  249.             var2.literal(var8).literal('.');
  250.          }
  251.  
  252.          var2.bold(var6.getName().getName()).literal('\u0011');
  253.          this.XRef(var2, var6, (Object)null, "(Section)");
  254.       }
  255.  
  256.       if (var7.length > 0) {
  257.          for(int var9 = 0; var9 < var7.length; ++var9) {
  258.             if (var9 > 0) {
  259.                var2.literal(",");
  260.             }
  261.  
  262.             var2.newParagraph("SummaryTty").println("   <PgfWithPrev Yes>").literal("    ");
  263.             if (var9 == 0) {
  264.                var2.literal(var1.isInterface() ? "extends " : "implements ");
  265.             } else {
  266.                var2.literal(var1.isInterface() ? "        " : "           ");
  267.             }
  268.  
  269.             var8 = var7[var9].getName().getQualifier();
  270.             if (var8 != null && var8 != Constants.idNull) {
  271.                var2.literal(var8).literal('.');
  272.             }
  273.  
  274.             var2.bold(var7[var9].getName().getName()).literal('\u0011');
  275.             this.XRef(var2, var7[var9], (Object)null, "(Section)");
  276.          }
  277.       }
  278.  
  279.       var2.newParagraph("SummaryTty").literal("{");
  280.  
  281.       for(int var14 = 0; var14 < var3.length; ++var14) {
  282.          var2.newParagraph("SummaryTty");
  283.          this.doVariableTTY(var3[var14], var2, 45, "    ", "        ", ";", true, true);
  284.       }
  285.  
  286.       for(int var10 = 0; var10 < var4.length; ++var10) {
  287.          var2.newParagraph("SummaryTty");
  288.          this.doMethodTTY(var4[var10], var2, 45, "    ", "        ", ";", true, true);
  289.       }
  290.  
  291.       for(int var11 = 0; var11 < var5.length; ++var11) {
  292.          var2.newParagraph("SummaryTty");
  293.          this.doMethodTTY(var5[var11], var2, 45, "    ", "        ", ";", true, true);
  294.       }
  295.  
  296.       var2.newParagraph("SummaryTty").println("   <PgfWithPrev Yes>").println("   <PgfSpAfter  6.0 pt>").literal('}');
  297.    }
  298.  
  299.    private void genDocumentation(MIFPrintStream var1, FieldDefinition[] var2, int var3) {
  300.       Hashtable var4 = null;
  301.       if (var2.length > 0) {
  302.          var1.newParagraph("Heading1");
  303.          if (var3 == 1) {
  304.             var1.markReference(this.classTag(this.currentClass, this.currentClass.getName().getName()));
  305.          }
  306.  
  307.          var1.literal(DocumentationStrings[var3]);
  308.  
  309.          for(int var5 = 0; var5 < var2.length; ++var5) {
  310.             FieldDefinition var6 = var2[var5];
  311.             if (var3 == 0) {
  312.                this.genVariableDocumentation(var1, var6);
  313.             } else if (var3 == 1) {
  314.                this.genMethodDocumentation(var1, var6, false);
  315.             } else {
  316.                Identifier var7 = var6.getName();
  317.                if (var4 == null) {
  318.                   var4 = new Hashtable();
  319.                }
  320.  
  321.                this.genMethodDocumentation(var1, var6, var4.get(var7) == null);
  322.                var4.put(var7, var7);
  323.             }
  324.  
  325.             if (Main.showIndex) {
  326.                this.allFields.addElement(var6);
  327.             }
  328.          }
  329.  
  330.       }
  331.    }
  332.  
  333.    void genVariableDocumentation(MIFPrintStream var1, FieldDefinition var2) {
  334.       ClassDefinition var3 = var2.getClassDefinition();
  335.       String var4 = var2.getName().toString();
  336.       var1.newParagraph("FieldTtyHead").literal(var4).markReference(this.classTag(this.currentClass, var4)).mark(22, var4).index(var4 + ":" + "<Code in index>" + (var2.isStatic() ? "static " : "") + var2.getType().typeString(var4.toString(), true, false) + "<Default Para Font> in " + (var3.isInterface() ? "interface " : "class ") + var2.getClassDeclaration().getName().getName());
  337.       var1.newParagraph("FieldTty");
  338.       this.doVariableTTY(var2, var1, 52, "", "", "", false, false);
  339.       String var5 = var2.getDocumentation();
  340.       if (var5 != null) {
  341.          Vector var6 = DocumentationGenerator.mergeDoc(var5);
  342.          String var7 = ((DocumentationGenerator)this).getComment(var6);
  343.          Vector var8 = ((DocumentationGenerator)this).getSees(var6, this.currentClass);
  344.          if (var7 != null) {
  345.             var1.html("FieldComment", var7);
  346.          }
  347.  
  348.          if (var8 != null) {
  349.             var1.newParagraph("FieldInfo").literal("See Also:");
  350.             var1.newParagraph("FieldInfoData");
  351.             this.handleSeeStrings(var1, var8);
  352.          }
  353.       }
  354.  
  355.    }
  356.  
  357.    void genMethodDocumentation(MIFPrintStream var1, FieldDefinition var2, boolean var3) {
  358.       ClassDefinition var4 = var2.getClassDefinition();
  359.       var2.getType();
  360.       boolean var5 = var2.isConstructor();
  361.       Identifier var6 = var5 ? var4.getName().getName() : var2.getName();
  362.       var1.newParagraph("FieldTtyHead").literal(var6).mark(22, this.methodFullName(var2)).markReference(this.classTag(this.currentClass, this.methodFullName(var2))).index(var6 + ":" + "<Code in index>" + (var2.isStatic() ? "static " : "") + var2.getType().typeString(var6.toString(), true, !var5) + "<Default Para Font> in " + (var4.isInterface() ? "interface " : "class ") + var2.getClassDeclaration().getName().getName());
  363.       if (var3) {
  364.          var1.markReference(this.classTag(this.currentClass, var2.getName()));
  365.       }
  366.  
  367.       var1.newParagraph("FieldTty");
  368.       this.doMethodTTY(var2, var1, 52, "", "", "", false, false);
  369.       ClassDeclaration[] var7 = var2.getExceptions(super.env);
  370.       if (var7.length > 0) {
  371.          var1.newParagraph("FieldTty").indent((double)0.25F, (double)0.5F, (double)0.25F).literal("throws");
  372.  
  373.          for(int var8 = 0; var8 < var7.length; ++var8) {
  374.             var1.literal(var8 > 0 ? ", " : " ").literal(var7[var8].getName().getName());
  375.          }
  376.       }
  377.  
  378.       var1.topLevel();
  379.       String var19 = ((DocumentationGenerator)this).getDocumentation(var2);
  380.       FieldDefinition var9 = ((DocumentationGenerator)this).getOverride(var2);
  381.       if (var9 != null && var19 == null) {
  382.          var19 = "";
  383.       }
  384.  
  385.       if (var19 != null) {
  386.          Vector var10 = DocumentationGenerator.mergeDoc(var19);
  387.          String var11 = ((DocumentationGenerator)this).getComment(var10);
  388.          String var12 = ((DocumentationGenerator)this).getReturn(var10);
  389.          Vector var13 = ((DocumentationGenerator)this).getSees(var10, this.currentClass);
  390.          Vector var14 = DocumentationGenerator.getParameters(var10);
  391.          Vector var15 = ((DocumentationGenerator)this).getThrows(var10, var2);
  392.          if (var11 != null) {
  393.             var1.html("FieldComment", var11);
  394.          }
  395.  
  396.          if (var14 != null) {
  397.             var1.newParagraph("FieldInfo").literal("Parameters:");
  398.  
  399.             for(int var16 = 0; var16 < var14.size(); var16 += 2) {
  400.                String var17 = (String)var14.elementAt(var16);
  401.                String var18 = (String)var14.elementAt(var16 + 1);
  402.                var1.newParagraph("ParameterName").literal(var17);
  403.                var1.html("ParameterData", var18);
  404.             }
  405.          }
  406.  
  407.          if (var12 != null) {
  408.             var1.newParagraph("FieldInfo").literal("Returns:");
  409.             var1.html("FieldInfoData", var12);
  410.          }
  411.  
  412.          if (var15 != null) {
  413.             for(int var21 = 0; var21 < var15.size(); var21 += 2) {
  414.                ClassDeclaration var23 = (ClassDeclaration)var15.elementAt(var21);
  415.                String var24 = (String)var15.elementAt(var21 + 1);
  416.                var1.newParagraph("FieldInfo").println("   <PgfPlacementStyle RunIn>").println("   <PgfRunInDefaultPunct `: '>").literal("Throws").newParagraph("FieldInfoData").charTag("ClassName", var23.getName().getName());
  417.                this.XRef(var1, var23);
  418.                var1.html("FieldInfoData", var24);
  419.             }
  420.          }
  421.  
  422.          if (var9 != null) {
  423.             ClassDeclaration var22 = var9.getClassDeclaration();
  424.             var1.newParagraph("FieldInfo").literal("Overrides:");
  425.             var1.newParagraph("FieldInfoData").charTag("MethodName", var9.getName() + "()").literal(" in class ").charTag("ClassName", var22.getName().getName());
  426.             this.XRef(var1, var22, this.methodFullName(var2));
  427.             var1.literal('.');
  428.             Object var20 = null;
  429.          }
  430.  
  431.          if (var13 != null) {
  432.             var1.newParagraph("FieldInfo").literal("See Also:");
  433.             var1.newParagraph("FieldInfoData");
  434.             this.handleSeeStrings(var1, var13);
  435.          }
  436.       }
  437.  
  438.    }
  439.  
  440.    private void doMethodTTY(FieldDefinition var1, MIFPrintStream var2, int var3, String var4, String var5, String var6, boolean var7, boolean var8) {
  441.       Type[] var9 = var1.getType().getArgumentTypes();
  442.       Identifier var10 = var1.isConstructor() ? var1.getClassDeclaration().getName().getName() : var1.getName();
  443.       int var11 = var10.toString().length();
  444.       ClassDeclaration var12 = var1.getClassDeclaration();
  445.       if (var1.getArguments() == null) {
  446.          throw new RuntimeException("getArguments returns null for " + var1);
  447.       } else {
  448.          Enumeration var13 = var1.getArguments().elements();
  449.          if (!var1.isStatic()) {
  450.             var13.nextElement();
  451.          }
  452.  
  453.          StringBuffer var14 = new StringBuffer();
  454.          StringBuffer var15 = new StringBuffer();
  455.          var14.append(DocumentationGenerator.modString(var1).trim());
  456.          if (!var1.isConstructor()) {
  457.             var14.append(" ").append(((DocumentationGenerator)this).typeString(var1.getType().getReturnType())).append(((DocumentationGenerator)this).typeArrayString(var1.getType().getReturnType()));
  458.          }
  459.  
  460.          var15.append('(');
  461.  
  462.          for(int var16 = 0; var16 < var9.length; ++var16) {
  463.             LocalField var17 = (LocalField)var13.nextElement();
  464.             if (var16 > 0) {
  465.                var15.append(", ");
  466.             }
  467.  
  468.             var15.append(((DocumentationGenerator)this).typeString(var9[var16])).append('\u0011').append(((FieldDefinition)var17).getName()).append(((DocumentationGenerator)this).typeArrayString(var9[var16]));
  469.          }
  470.  
  471.          var15.append(")").append(var6);
  472.          Vector var24 = new Vector();
  473.          int var18 = var4.length() + var14.length() + 1 + var11;
  474.          boolean var19 = this.trySplit(var15, var24, var3 - var18, var7 ? 1 : -1);
  475.          Vector var20 = new Vector();
  476.          this.trySplit(var15, var20, var3 - var5.length() - var11, var7 ? 1 : -1);
  477.          if (!var19 && var24.size() <= var20.size()) {
  478.             var13 = var24.elements();
  479.             var2.literal(var4).literal(var14).literal(' ');
  480.             if (var8) {
  481.                var2.bold(var10);
  482.             } else {
  483.                var2.literal(var10);
  484.             }
  485.  
  486.             var2.literal(var13.nextElement());
  487.             if (var7) {
  488.                var2.literal('\t');
  489.                this.XRef(var2, var12, this.methodFullName(var1), "Section & Page");
  490.             }
  491.  
  492.             for(; var13.hasMoreElements(); var2.literal(var13.nextElement())) {
  493.                var2.literal('\n').literal(var4);
  494.                int var25 = var14.length() + 1 + var11 + 1;
  495.  
  496.                while(true) {
  497.                   --var25;
  498.                   if (var25 < 0) {
  499.                      break;
  500.                   }
  501.  
  502.                   var2.literal('\u0011');
  503.                }
  504.             }
  505.  
  506.          } else {
  507.             var13 = var20.elements();
  508.             var2.literal(var4).literal(var14);
  509.             if (var7) {
  510.                var2.literal('\t');
  511.                this.XRef(var2, var12, this.methodFullName(var1), "Section & Page");
  512.             }
  513.  
  514.             var2.literal('\n').literal(var5);
  515.             if (var8) {
  516.                var2.bold(var10);
  517.             } else {
  518.                var2.literal(var10);
  519.             }
  520.  
  521.             var2.literal(var13.nextElement());
  522.  
  523.             for(; var13.hasMoreElements(); var2.literal(var13.nextElement())) {
  524.                var2.literal('\n').literal(var5);
  525.                int var21 = var11 + 1;
  526.  
  527.                while(true) {
  528.                   --var21;
  529.                   if (var21 < 0) {
  530.                      break;
  531.                   }
  532.  
  533.                   var2.literal('\u0011');
  534.                }
  535.             }
  536.  
  537.          }
  538.       }
  539.    }
  540.  
  541.    boolean trySplit(StringBuffer var1, Vector var2, int var3, int var4) {
  542.       boolean var5 = false;
  543.       String var6 = var1.toString();
  544.  
  545.       for(int var7 = 0; var6.length() > 0; ++var7) {
  546.          int var8 = var3 + (var7 == 0 ? 0 : var4);
  547.          String var9;
  548.          if (var6.length() <= var8) {
  549.             var9 = var6;
  550.             var6 = "";
  551.          } else {
  552.             int var10 = var6.lastIndexOf(32, var8);
  553.             if (var10 == -1) {
  554.                var10 = var6.indexOf(32);
  555.             }
  556.  
  557.             if (var10 == -1) {
  558.                var9 = var6;
  559.                var6 = "";
  560.             } else {
  561.                var9 = var6.substring(0, var10);
  562.                var6 = var6.substring(var10 + 1);
  563.             }
  564.          }
  565.  
  566.          if (var9.length() > var8) {
  567.             var5 = true;
  568.          }
  569.  
  570.          var2.addElement(var9);
  571.       }
  572.  
  573.       return var5;
  574.    }
  575.  
  576.    private void doVariableTTY(FieldDefinition var1, MIFPrintStream var2, int var3, String var4, String var5, String var6, boolean var7, boolean var8) {
  577.       Identifier var9 = var1.getName();
  578.       int var10 = var9.toString().length();
  579.       StringBuffer var11 = new StringBuffer();
  580.       StringBuffer var12 = new StringBuffer();
  581.       var11.append(DocumentationGenerator.modString(var1).trim()).append(' ').append(((DocumentationGenerator)this).typeString(var1.getType()));
  582.       var12.append(((DocumentationGenerator)this).typeArrayString(var1.getType())).append(var6);
  583.       var2.literal(var4).literal(var11);
  584.       if (var4.length() + var11.length() + 1 + var10 + var12.length() <= var3) {
  585.          var2.literal(' ');
  586.          if (var8) {
  587.             var2.bold(var9).literal(var12);
  588.          } else {
  589.             var2.literal(var9).literal(var12);
  590.          }
  591.  
  592.          if (var7) {
  593.             var2.literal('\t');
  594.             this.XRef(var2, var1.getClassDeclaration(), var9, "Section & Page");
  595.             return;
  596.          }
  597.       } else {
  598.          if (var7) {
  599.             var2.literal('\t');
  600.             this.XRef(var2, var1.getClassDeclaration(), var9, "Section & Page");
  601.          }
  602.  
  603.          var2.literal('\n').literal(var5);
  604.          if (var8) {
  605.             var2.bold(var9).literal(var12);
  606.             return;
  607.          }
  608.  
  609.          var2.literal(var9).literal(var12);
  610.       }
  611.  
  612.    }
  613.  
  614.    void genFieldIndex() {
  615.       System.out.println("No need for index for MIF");
  616.    }
  617.  
  618.    void genClassTree(Hashtable var1, ClassDeclaration var2) {
  619.       this.currentClass = null;
  620.       PrintStream var3 = DocumentationGenerator.openFile("tree.mif");
  621.       MIFPrintStream var4 = new MIFPrintStream(var3, "AW.mif", 17);
  622.       var4.newParagraph("Chapter Number").println("   <PgfNumFormat `C:\\x12 <A=1\\>< =0\\>< =0\\>< =0\\>< =0\\>'>").charTag("Chapter Word", "appendix");
  623.       var4.newParagraph("Chapter Title").literal("Class Hierarchy");
  624.       this.genClassTree(var4, var1, var2, 0);
  625.       var4.close();
  626.    }
  627.  
  628.    private void genClassTree(MIFPrintStream var1, Hashtable var2, ClassDeclaration var3, int var4) {
  629.       Identifier var5 = var3.getName().getQualifier();
  630.       Identifier var6 = var3.getName().getName();
  631.       var1.newParagraph("Body").skip(0).indent((double)0.25F * (double)var4, (double)0.25F * (double)(var4 + 2), (double)0.0F);
  632.  
  633.       try {
  634.          ClassDefinition var7 = var3.getClassDefinition(super.env);
  635.          ClassDeclaration[] var8 = var7.getInterfaces();
  636.          var1.literal(var7.isClass() ? "class " : "interface ").literal(var5).literal('.').bold(var6);
  637.          this.XRef(var1, var3);
  638.          if (var8.length > 0) {
  639.             var1.literal(var7.isInterface() ? " extends" : " implements").literal('\u0011');
  640.  
  641.             for(int var9 = 0; var9 < var8.length; ++var9) {
  642.                ClassDeclaration var10 = var8[var9];
  643.                if (var9 > 0) {
  644.                   var1.literal(", ");
  645.                }
  646.  
  647.                var1.literal(var10.getName().getName());
  648.                this.XRef(var1, var10);
  649.             }
  650.          }
  651.       } catch (ClassNotFound var11) {
  652.       }
  653.  
  654.       ClassDeclaration[] var13 = (ClassDeclaration[])var2.get(var3);
  655.       if (var13 != null && var13.length > 0) {
  656.          ++var4;
  657.  
  658.          for(int var14 = 0; var14 < var13.length; ++var14) {
  659.             this.genClassTree(var1, var2, var13[var14], var4);
  660.          }
  661.       }
  662.  
  663.    }
  664.  
  665.    String authorString(String var1) {
  666.       return var1;
  667.    }
  668.  
  669.    String commentString(String var1) {
  670.       return var1;
  671.    }
  672.  
  673.    String versionString(String var1) {
  674.       return var1;
  675.    }
  676.  
  677.    String returnString(String var1) {
  678.       return var1;
  679.    }
  680.  
  681.    String classString(ClassDeclaration var1) {
  682.       return var1.getName().getName().toString();
  683.    }
  684.  
  685.    private void handleSeeStrings(MIFPrintStream var1, Vector var2) {
  686.       boolean var3 = true;
  687.  
  688.       for(Enumeration var4 = var2.elements(); var4.hasMoreElements(); var3 = false) {
  689.          ClassDeclaration var5 = (ClassDeclaration)var4.nextElement();
  690.          String var6 = (String)var4.nextElement();
  691.          String var7 = (String)var4.nextElement();
  692.          if (!var3) {
  693.             var1.literal(", ");
  694.          }
  695.  
  696.          if (var6 == null) {
  697.             var1.charTag("ClassName", var5.getName().getName());
  698.             this.XRef(var1, var5);
  699.          } else {
  700.             Identifier var8 = Identifier.lookup(var6);
  701.  
  702.             try {
  703.                FieldDefinition var9 = var5.getClassDefinition(super.env).findAnyMethod(super.env, var8);
  704.                if (var9 != null && var9.isMethod()) {
  705.                   var6 = var6 + "()";
  706.                }
  707.             } catch (ClassNotFound var10) {
  708.             }
  709.  
  710.             var1.charTag("MethodName", var6);
  711.             if (var5 != this.currentClass) {
  712.                var1.literal(" in class").literal('\u0011').charTag("ClassName", var5.getName().getName());
  713.             }
  714.  
  715.             this.XRef(var1, var5, var7);
  716.          }
  717.       }
  718.  
  719.       var1.literal('.');
  720.    }
  721.  
  722.    String methodFullName(FieldDefinition var1) {
  723.       Identifier var2 = var1.isConstructor() ? var1.getClassDeclaration().getName().getName() : var1.getName();
  724.       return var1.getType().typeString(var2.toString(), false, false);
  725.    }
  726.  
  727.    String classTag(ClassDeclaration var1) {
  728.       return "class " + var1.getName();
  729.    }
  730.  
  731.    String classTag(ClassDeclaration var1, Object var2) {
  732.       return "class " + var1.getName() + "." + var2;
  733.    }
  734.  
  735.    String sourceFile(ClassDeclaration var1) {
  736.       Identifier var2 = var1.getName().getQualifier();
  737.       return var2 + ".fm";
  738.    }
  739.  
  740.    void XRef(MIFPrintStream var1, ClassDeclaration var2) {
  741.       this.XRef(var1, var2, (Object)null);
  742.    }
  743.  
  744.    void XRef(MIFPrintStream var1, ClassDeclaration var2, Object var3) {
  745.       var1.literal('\u0011');
  746.       this.XRef(var1, var2, var3, "(Section)");
  747.    }
  748.  
  749.    void XRef(MIFPrintStream var1, ClassDeclaration var2, Object var3, String var4) {
  750.       String var5 = this.sourceFile(var2);
  751.       if (this.currentClass != null && this.sourceFile(this.currentClass).equals(var5)) {
  752.          var5 = null;
  753.       }
  754.  
  755.       String var6 = var3 == null ? this.classTag(var2) : this.classTag(var2, var3);
  756.       var1.XRef(var4, var6, var5);
  757.    }
  758. }
  759.